- 支持
MySQL8
全新的caching_sha2_password
密码验证算法 - 增加
enable_coroutine
配置项,用于关闭自动创建协程 - 移除
--enable-coroutine
编译配置 - 修复
chan->push
无法立即唤醒等待协程的问题
4.0.1
之前的版本,底层在Server
和Timer
的事件回调函数中会自动创建协程,如果回调函数中没有使用任何协程API
,这会浪费一次协程创建/销毁操作。而且无法与1.x
保持兼容。
新版本中增加了enable_coroutine
配置项,可关闭内置协程。用户可根据需要,在回调函数中自行使用Coroutine::create
或go
创建协程。关闭内置协程后,底层与1.x
版本的行为保持了一致性,实现了100%
兼容。原先使用1.x
的框架,也可以直接基于4.0
作为运行环境。
现在可以动态选择是否启用内置协程,那么--enable-coroutine
编译配置变得可有可无了。新版本中移除了该编译选项。
use Swoole\Http\Request;
use Swoole\Http\Response;
$http = new swoole_http_server('127.0.0.1', 9501);
$http->set([
'enable_coroutine' => false, // close build-in coroutine
]);
$http->on('workerStart', function () {
echo "Coroutine is " . (Co::getuid() > 0 ? 'enable' : 'disable')."\n";
});
$http->on("request", function (Request $request, Response $response) {
$response->header("Content-Type", "text/plain");
if ($request->server['request_uri'] == '/co') {
//关闭内置协程后,需要手工创建协程
go(function () use ($response) {
$response->end("Hello Coroutine #" . Co::getuid());
});
} else {
//没有任何协程操作,这里不存在额外的协程调度开销
$response->end("Hello Swoole #" . Co::getuid());
}
});
$http->start();